Classic techniques for logging computer activity, such as are typically used for debugging computer software, involve creating software instructions to monitor a computer program during its execution and record information related to its execution, such as the values of program variables at different points during execution, as well as information related to program flow. Such information is stored in a file that may be reviewed to identify coding errors and other anomalies. Unfortunately, such techniques are all-or-nothing propositions, where monitoring is either activated or not for all execution scenarios. Furthermore, while different aspects of a program may be monitored for different reasons, reviewing logged information is often difficult and inefficient where a single log file is used, and where most of the logged information is not related to a particular aspect of program execution that the reviewer is investigating.